// 有数对接
import sr from 'sr-sdk-wxapp';
import $config from '@/config';
export default {
  isInit: false,
  // 支持有数的appid
  appIdList: ['wx09fae71b8f9b5d9c', 'wx52d58db64d84208e'],
  // 初始化
  init() {
    try {
      if (this.appIdList.includes($config.appId) && !this.isInit) {
        console.log('开始初始化有数');
        sr.init({
          /**
           * 有数 - ka‘接入测试用’ 分配的 app_id，对应的业务接口人负责
           */
          token: $config.srAppId,
          /**
           * 微信小程序appID，以wx开头
           */
          appid: $config.appId,
          /**
           * 如果使用了小程序插件，需要设置为 true
           */
          usePlugin: true,
          /**
           * 开启打印调试信息， 默认 false
           */
          debug: false,
          /**
           * 建议开启-开启自动代理 Page， 默认 false
           * sdk 负责上报页面的 browse 、leave、share 等事件
           * 可以使用 sr.page 代替 Page(sr.page(options))
           * 元素事件跟踪，需要配合 autoTrack: true
           */
          proxyPage: true,
          /**
           * 建议开启-开启组件自动代理， 默认 false
           * sdk 负责上报页面的 browse 、leave、share 等事件
           */
          proxyComponent: true,
          // 建议开启-是否开启页面分享链路自动跟踪
          openSdkShareDepth: true,
          // 建议开启-元素事件跟踪，自动上报元素事件，入tap、change、longpress、confirm
          autoTrack: true,
          // 建议开启-自动化获取openId，授权过的小程序可自动化获取openId
          openAutoTrackOpenId: true
        });
        this.isInit = true;
      }
    } catch (e) {
      console.warn('sr.init->', e);
    }
  },
  // 手动同步用户信息
  setUser(opts) {
    try {
      if (this.appIdList.includes($config.appId)) {
        if (!this.isInit) {
          this.init();
        }
        // 校验
        const storageSr = uni.getStorageSync('__SR_SDK_TRACKER___production');
        if (storageSr?.USER_INFO) {
          const USER_INFO = storageSr.USER_INFO;
          if (!USER_INFO.open_id) {
            sr.setUser({
              open_id: opts.openId,
              union_id: opts.unionId || ''
            });
          }
        }
      } else {
        console.log(`[${$config.appId}]当前小程序不上报有数`);
      }
    } catch (e) {
      console.log('setUser-> ', e);
    }
  },
  // 统一上报
  track(name, opts) {
    try {
      if (this.appIdList.includes($config.appId)) {
        if (!this.isInit) {
          this.init();
        }
        // console.log('sr.track->', name, opts);
        sr.track(name, opts);
      } else {
        console.log(`[${$config.appId}]当前小程序不上报有数`);
      }
    } catch (e) {
      console.warn('sr.track->', e);
    }
  },
  // 商品卡相关，曝光、点击
  trackProductCard(name, detail) {
    try {
      const { productId, productTitle } = detail;
      this.track(name, {
        'sku': {
          sku_id: productId,
          sku_name: productTitle
        },
        'spu': {
          spu_id: productId,
          spu_name: productTitle
        }
      });
    } catch (e) {
      console.warn('trackProductCard-> ', e);
    }
  },
  // 订单相关
  // give_order：用户提交订单；
  // pay：用户发起支付；
  // cancel_pay：用户关闭支付密码浮层；
  // payed：用户完成支付（影响有数实时订单统计）；
  // cancel_give_order：用户取消订单；
  // refund：用户发起退货退款
  trackCustomOrder(status, orderInfo) {
    try {
      const { productPrice, totalPay, orderNo, createdAt, productCount } = orderInfo;
      this.track('custom_order', {
        'order': {
          'order_id': orderNo,
          'order_time': +new Date(createdAt.replace(/-/gi, '/')),
          'order_status': status
        },
        'sub_orders': [{
          'sub_order_id': orderNo,
          'order_amt': Number(productPrice * productCount),
          'pay_amt': Number(totalPay)
        }]
      });
    } catch (e) {
      console.warn('srTrack-> ', e);
    }
  }
};

